extends Node2D

@onready var players = $Players
const PLAYER = preload("res://场景/Player.tscn")
var peer = ENetMultiplayerPeer.new()
@onready var ui = $UI

@onready var server_ip = $UI/Server_IP

@onready var creat_server = $UI/creat_server
@onready var join_server = $UI/Join_server



# Called when the node enters the scene tree for the first time.
func _ready():
	
	pass # Replace with function body.

## 关于节点场景的本地化，需要注意

## 创建服务器
func _on_creat_server_button_down():
	
	#读取输入的服务器ip地址，当输入为true时开始创建服务器
	if server_ip.text!="":
		#创建监听的服务器,即创建了一个地址为 :7788 的服务器
		peer.set_bind_ip(server_ip.text)
		var error = peer.create_server(7788)
		if error != OK:
			printerr("创建服务器失败, 错误码", error)
			return
		multiplayer.multiplayer_peer = peer
		#连接成功隐藏button、IP
		ui.hide()
		# 作为服务端，需要监听是否有别的客户端进行连接
		multiplayer.peer_connected.connect(_on_peer_connected)
		# 客户端创建成功后，在当前场景添加玩家
		# multiplayer.get_unique_id()用于获取当前客户端的唯一id，作为服务器的客户端，一般id均为1
		add_player(multiplayer.get_unique_id())

	pass # Replace with function body.

## 创建客户端并连接服务器
func _on_join_server_button_down():
	#读取输入的服务器ip地址，当输入为true时开始创建服务器
	if server_ip.text!="":
		# 创建客户端并连接ip为127.0.0.1:7788的服务器
		var error = peer.create_client(server_ip.text, 7788)
		if error != OK:
			printerr("连接服务器服务器失败, 错误码", error)
			return
		multiplayer.multiplayer_peer = peer
		#连接成功隐藏button
		ui.hide()
	pass # Replace with function body.


func add_player(id: int) -> void:
	#用player场景节点进行实例化，初始化一个子节点
	var player = PLAYER.instantiate()
	player.name = str(id)
	#父节点添加连接入的玩家的子节点
	players.add_child(player)

## 当有新的客户端连接时，该方法会被触发, 该方法只有主机端会被触发！
func _on_peer_connected(id: int) -> void:
	print("有玩家连接，ID为",id) 
	# 添加新玩家
	add_player(id)
	pass


